// PROGRAMA : IDCPB003(PROGRAMA BATCH)  14/03/2002
// BIBLIOTECA : SISP
// OBJETIVO : GERAR ARQUIVO PARA AMERICAN BANK NOTE COMPANY - ABN
// : USER = RENACHMA
// : PASSWORD = ABN738
// : IP = 100.249.158.131
// JCL : PDS.SEJUSP (ABNCAREG)

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileWriter;
import java.io.IOException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.DidEmissao;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Abncareg OBJETIVO : GERAR ARQUIVO PARA AMERICAN BANK NOTE COMPANY - ABN *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/abncareg")
public class Abncareg {
	// Views utilizadas
	SicTabelas vwTabele = new SicTabelas();
	SicTabelas vwDvetab = new SicTabelas();
	DidCadastro vwDidcad = new DidCadastro();
	DidEmissao vwEmissao = new DidEmissao();
	SicControle vwDvecon = new SicControle();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	FileWriter arquivo1;
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	private long iRegger; // NUMERO DO RG
	private String iNomide; // NOME DO IDENTIFICADO
	private String iNompai; // NOME DO PAI
	private String iNommae; // NOME DA MAE
	private int iCodsex; // CODIGO DO SEXO
	private int iDatnas; // DATA DE NASCIMENTO
	private int iComuna; // CODIGO DO MUNICIPIO DE NASCIMENTO
	private String iUfnasc; // UF NASCIMENTO
	private String iNacion; // CODIGO DA NACIONALIDADE
	private String iNomcar; // NOME DO CARTORIO
	private String iZonaof; // ZONA/OFICIO
	private String iVcivil; // VARA CIVIL
	private String iNumcer; // NUMERO DA CERTIDAO
	private String iNumliv; // NUMERO DO LIVRO
	private String iNumfol; // NUMERO DA FOLHA DO LIVRO
	private int iNumpor; // NUMERO DA PORTARIA MINISTERIAL
	private int iAnopor; // ANO DA PORTARIA MINISTERIAL
	private int iTipdoc; // TIPO DE DOCUMENTO (1=CERTIDAO DE NASCIMENTO,2=CERT.
							// DE CASAMENTO,3=PORTARIA MINISTERIAL
	private int iCodpor; // PAIS DE ORIGEM
	private int iDatnat; // DATA DE NATURALIZACAO
	private String iEndere; // ENDERECO
	private String iComple; // COMPLEMENTO
	private String iBairro; // BAIRRO
	private int iComuen; // CODIGO DO MUNICIPIO REFERENTE AO ENDERECO
	private String iUfmure; // UF DO MUNICIPIO REFERENTE AO ENDERECO
	private int iCodcep; // CEP DO MUNICIPIO REFERENTE AO ENDERECO
	private int iCodcut; // CUTIS
	private int iCorolh; // COR DOS OLHOS
	private int iCorcab; // COR DOS CABELOS
	private int iTipcab; // TIPO DE CABELOS
	private int iEstciv; // ESTADO CIVIL
	private int iDoador; // DOADOR DE ORGAOS(NAO USADO)
	private int iCodpro; // CODIGO DA PROFISSAO
	private long iNumcpf;
	private String iNumacpf;
	private String iRenaid; // NUMERO DO RENAID(CONTROLE DE PAGAMENTO DO RG)
	private long iPispas; // PIS/PASEP
	private int iAltura; // ALTURA
	private long iRegant; // MUMERO DE RG ANTERIOR
	private String iUfrant; // UF DO RG ANTERIOR
	private String iNomant; // MOME ANTERIOR
	private int iNumpos; // NUMERO DO POSTO
	private int iMatfun; // MATRICULA DO FUNCIONARIO
	private int iNumvia; // NUMERO DA VIA DE EMISSAO
	private int iDatdoc; // DATA DE EMISSAO DO RG
	private int iGrauin; // GRAU DE INSTRUCAO
	private int iTipopp; // FIM DO REGISTRO

	private String chassi;
	private String nomeClasse = this.getClass().getSimpleName();
	private String jUser = UtilBean.getInitUser();
	private String chaveAlfa;
	private int i;
	private int datatu = 0;
	private String[] tabRenaid = { null, "MAI990339491", "MAI990341100", "MAI990340902", "MAI990340708", "MAI990339505", "MAI990341097", "MAI990340899", "MAI990340694", "MAI990339475", "MAI990341089", "MAI990340872", "MAI990340686", "MAI990339483", "MAI990341070", "MAI990340880", "MAI990340678", "MAI990339467", "MAI990341062", "MAI990340864", "MAI990340660", "MAI990339459", "MAI990341054", "MAI990340848", "MAI990340651", "MAI990339440", "MAI990341038", "MAI990340856", "MAI990340643", "MAI990339432", "MAI990341046", "MAI990340830", "MAI990340635", "MAI990339424", "MAI990341020", "MAI990340821", "MAI990340627", "MAI990339416", "MAI990341011", "MAI990340813", "MAI990340619", "MAI990339408", "MAI990341003", "MAI990340805", "MAI990340600", "MAI990339394", "MAI990340988", "MAI990340791", "MAI990340597", "MAI990339386", "MAI990340996", "MAI990340783", "MAI990340589", "MAI990343308", "MAI990340961", "MAI990340775", "MAI990340570", "MAI990343111", "MAI990340970", "MAI990340767", "MAI990340562", "MAI990343120", "MAI990340945", "MAI990340759", "MAI990340554", "MAI990343138", "MAI990340953", "MAI990340740", "MAI990340546", "MAI990343146", "MAI990340937", "MAI990340732", "MAI990340538", "MAI990343294", "MAI990340910", "MAI990340724", "MAI990340520", "MAI990343286", "MAI990340929", "MAI990340716", "MAI990340511", "MAI990343278", "MAI990340503", "MAI990340309", "MAI990340112", "MAI990343260", "MAI990340490", "MAI990340295", "MAI990340090", "MAI990343251", "MAI990340481", "MAI990340287", "MAI990340082", "MAI990343243", "MAI990340473", "MAI990340279", "MAI990340074" };
	private String regAbn; // INCLUDE TABREN

	// IF #USER NE 'S113590 " || #USER NE 'USERFTP" || #USER NE 'IDCTRANS'
	// WRITE '#ERRO: USUARIO NAO AUTORIZADO' #USER (AD=I)
	// WRITE 'LIGUE TEL: (098)9974-8432 / 227-5588 / 217-4041'(I)
	// WRITE 'ANALISTA DE SISTEMAS: SOLON'
	// STOP
	// END-IF
	// CARGA INICIAL 25/03/2002

	public Abncareg(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar() {
		try {
			main();
		} catch (Exception e) {
			trataErro(e);
		}
	}

	private void main() throws IOException {
		arquivo1 = new FileWriter("arquivo1");
		datatu = UtilBean.obtemDataCorrente();
		while (vwDidcad.pesquisaDataAtualizacaoMaior(20021001)) {

			mover();
			arquivo1.write(regAbn);
			// WRITE REG-ABN

			// //dao.commit();
			// //dao.rollback();
		}
		vwDidcad.fecha();

		regAbn = StringUtils.repeat("9", 200) + StringUtils.repeat("9", 200) + StringUtils.repeat("9", 118);
		arquivo1.write(regAbn);
		// WRITE REG-ABN

		if (vwDidcad.registrosProcessados() == 0) {

			UtilBean.mensagemTexto("#ERRO LEITURA: REGISTRO NAO ENCONTRADO NO DID-CADASTRO");
		}

		arquivo1.close();
	}

	private void mover() {

		iNumpos = vwDidcad.getNumeroPosto();
		iRegger = vwDidcad.getNumeroRg();
		iDatnas = vwDidcad.getDataNasc();
		iNumcpf = vwDidcad.getNumeroCpf();
		// MOVE VW-DIDCAD.DINIDE-DATATU TO I-DATATU

		iMatfun = vwDidcad.getMatriculaFunc();
		iNomide = vwDidcad.getNomeIdent();
		iNommae = vwDidcad.getNomeMae();
		iNumvia = vwDidcad.getNumeroVia();
		iRegant = vwDidcad.getRegistroAnterior();
		iUfrant = vwDidcad.getUfRegAnterior();
		iEstciv = vwDidcad.getEstadoCivil();
		iNacion = String.valueOf(vwDidcad.getNacionalidadeIdent());
		iComuna = vwDidcad.getNomeMunicipioIdent();
		iUfnasc = vwDidcad.getUfMunicipioNasc();
		iCodsex = vwDidcad.getCodigoSexo();
		iPispas = vwDidcad.getNumeroPisPasep();
		iTipdoc = vwDidcad.getTipoDocumento();
		// MOVE VW-DIDCAD.DINIDE-DATEXP TO I-DATEXP
		// MOVE VW-DIDCAD.DINIDE-COMUEX TO I-COMUEX
		// MOVE VW-DIDCAD.DIAIDE-UFEXPE TO I-UFEXPE
		// MOVE VW-DIDCAD.DINIDE-CARTRA TO I-CARTRA
		// MOVE VW-DIDCAD.DINIDE-NSERIE TO I-NSERIE
		// MOVE VW-DIDCAD.DINIDE-TITELE TO I-TITELE
		// MOVE VW-DIDCAD.DIAIDE-UFTITU TO I-UFTITU
		// MOVE VW-DIDCAD.DIAIDE-NUZONA TO I-NUZONA
		// MOVE VW-DIDCAD.DINIDE-CERMIL TO I-CERMIL
		// MOVE VW-DIDCAD.DINIDE-PRTCNH TO I-PRTCNH
		// MOVE VW-DIDCAD.DIAIDE-UFPCNH TO I-UFPCNH
		// MOVE VW-DIDCAD.DINIDE-TIPSAN TO I-TIPSAN
		// MOVE VW-DIDCAD.DINIDE-FATORH TO I-FATORH
		// MOVE VW-DIDCAD.DINIDE-CODCEP TO I-CODCEP

		iComuen = vwDidcad.getCodigoMunicipio();
		iUfmure = vwDidcad.getUfMunicipio();
		iCodpro = vwDidcad.getCodigoProfissao();
		iCodcut = vwDidcad.getCodigoCutis();
		iAltura = vwDidcad.getAlturaIdent();
		iCorolh = vwDidcad.getCodigoCorOlhos();
		iCorcab = vwDidcad.getCodigoCorCabelo();
		iTipcab = vwDidcad.getCodigoTipoCabelo();
		iDatdoc = vwDidcad.getDataDocumento();
		// MOVE VW-DIDCAD.DIAIDE-REGIAO TO I-REGIAO
		// MOVE VW-DIDCAD.DIAIDE-NSECAO TO I-NSECAO
		// MOVE VW-DIDCAD.DIAIDE-NUMRES TO I-NUMRES

		iZonaof = vwDidcad.getZonaOficio();
		iVcivil = vwDidcad.getVaraCivil();
		iNumliv = vwDidcad.getNumeroLivro();
		iNumfol = vwDidcad.getNumeroFolha();
		iNumcer = vwDidcad.getNumeroCertidao();
		iNomcar = vwDidcad.getNomeCartorio();
		iComple = vwDidcad.getComplementoEndereco();
		iBairro = vwDidcad.getNomeBairro();
		iEndere = vwDidcad.getEnderecoIdent();
		iNomant = vwDidcad.getNomeAnterior();
		iNompai = vwDidcad.getNomePai();
		iNumpor = vwDidcad.getNumeroPortariaMinist();
		iAnopor = vwDidcad.getAnoPortariaMinist();
		iCodpor = vwDidcad.getPaisOrigem();
		iDatnat = vwDidcad.getDataNaturalizacao();
		iGrauin = vwDidcad.getGrauin();
		iTipopp = vwDidcad.getTipopp();
		i += 1;
		if (i > 299) {

			UtilBean.mensagemTexto("TERMINO NORMAL DE GERACAO DO ARQUIVO PARA TESTE DA ABN");
			return;
		}

		// MOVE
		iRenaid = tabRenaid[i];
		if (vwDidcad.getNacionalidadeIdent() == 1) {
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 1);
			// TABELA DE MUNICIPIOS
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getNomeMunicipioIdent());
			// NOME DO MUNICIPIO
			vwDvetab.resp = funcoes.sisst001(1, vwDidcad.getNomeMunicipioIdent(), vwDvetab.resp);
			// MOVE RESP TO I-DESCOM

			if (UtilBean.subStr(vwDvetab.resp, 0, 1).equals("*")) {
				vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 209);
				// TABELA DE PAISES
				vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
				// PAIS DE ORIGEM

				vwDvetab.resp = funcoes.sisst001(3, vwDidcad.getPaisOrigem(), vwDvetab.resp);
			}

		} else {
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 209);
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			vwDvetab.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), vwDvetab.resp);
		}

		// MOVE RESP TO I-DESCOM

		switch (vwDidcad.getTipoDocumento()) {
		case 1: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		// I-TIPDOCA:= 1 CERTIDAO DE NASCIMENTO

		case 2: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		// I-TIPDOCA:= 2 CERTIDAO DE CASAMENTO

		case 3: {
			iNumpor = vwDidcad.getNumeroPortariaMinist();
			iAnopor = vwDidcad.getAnoPortariaMinist();
			// I-TIPDOCA:= 3 PORTARIA MINISTERIAL
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 209);
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			// PESQUISA TABELA
			vwDvetab.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), vwDvetab.resp);
			break;
		}

		// MOVE RESP TO I-DESCOM
		case 4: {
			iNumpor = vwDidcad.getNumeroPortariaMinist();
			iAnopor = vwDidcad.getAnoPortariaMinist();
			// I-TIPDOCA:= 4 NACIONALIDADE PORTUGUESA-PORT.MINISTERIAL
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 209);
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			// PESQUISA TABELA

			vwDvetab.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), vwDvetab.resp);
			break;
		}

		// MOVE RESP TO I-DESCOM

		case 5: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}

		// I-TIPDOCA:= 5 SEPARACAO JUDICIAL

		case 6: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}

		// I-TIPDOCA:= 6 SEPARACAO POR DIVORCIO
		default: {
			break;
		}
		}
		iDatnas = vwDidcad.getDataNasc();
		if (vwDidcad.getRegistroAnterior() > 0 && vwDidcad.getUfRegAnterior() == sessao.getSisgsisp().getUfloca())
		// I-TIPDOCI:= 1 RG ANTERIOR DEVE SER IMPRESSO
		{
			iRegant = vwDidcad.getRegistroAnterior();
		} else {
			if (vwDidcad.getNumeroPisPasep() > 0)
			// I-TIPDOCI:= 2 PIS/PASEP DEVE SER IMPRESSO
			{
				iPispas = vwDidcad.getNumeroPisPasep();
			} else {
				iRegant = 0;
				iPispas = 0;
			}

		}

		if (vwDidcad.getNumeroCpf() > 0)
		// I-TIPDOCI:= 3 CPF DEVE SER IMPRESSO
		{
			iNumcpf = vwDidcad.getNumeroCpf();
		} else {
			iNumacpf = StringUtils.repeat("*", 11);
		}

		if (iNumacpf.equals("0")) {
			iNumacpf = StringUtils.repeat("*", 11);
		}

		iNumvia = vwDidcad.getNumeroVia();
		regAbn = "";
		regAbn = UtilBean.moveSubstring(regAbn, 0, 13, "N", iRegger);
		regAbn = UtilBean.moveSubstring(regAbn, 13, 60, "A", iNomide);
		regAbn = UtilBean.moveSubstring(regAbn, 73, 60, "A", iNompai);
		regAbn = UtilBean.moveSubstring(regAbn, 133, 60, "A", iNommae);
		regAbn = UtilBean.moveSubstring(regAbn, 193, 1, "N", iCodsex);
		regAbn = UtilBean.moveSubstring(regAbn, 194, 8, "N", iDatnas);
		regAbn = UtilBean.moveSubstring(regAbn, 202, 4, "N", iComuna);
		regAbn = UtilBean.moveSubstring(regAbn, 206, 2, "A", iUfnasc);
		regAbn = UtilBean.moveSubstring(regAbn, 208, 2, "A", iNacion);
		regAbn = UtilBean.moveSubstring(regAbn, 210, 20, "A", iNomcar);
		regAbn = UtilBean.moveSubstring(regAbn, 230, 6, "A", iZonaof);
		regAbn = UtilBean.moveSubstring(regAbn, 236, 6, "A", iVcivil);
		regAbn = UtilBean.moveSubstring(regAbn, 242, 9, "A", iNumcer);
		regAbn = UtilBean.moveSubstring(regAbn, 251, 8, "A", iNumliv);
		regAbn = UtilBean.moveSubstring(regAbn, 259, 6, "A", iNumfol);
		regAbn = UtilBean.moveSubstring(regAbn, 265, 5, "N", iNumpor);
		regAbn = UtilBean.moveSubstring(regAbn, 270, 4, "N", iAnopor);
		regAbn = UtilBean.moveSubstring(regAbn, 274, 1, "N", iTipdoc);
		regAbn = UtilBean.moveSubstring(regAbn, 275, 4, "N", iCodpor);
		regAbn = UtilBean.moveSubstring(regAbn, 279, 8, "N", iDatnat);
		regAbn = UtilBean.moveSubstring(regAbn, 287, 30, "A", iEndere);
		regAbn = UtilBean.moveSubstring(regAbn, 317, 20, "A", iComple);
		regAbn = UtilBean.moveSubstring(regAbn, 337, 20, "A", iBairro);
		regAbn = UtilBean.moveSubstring(regAbn, 357, 4, "N", iComuen);
		regAbn = UtilBean.moveSubstring(regAbn, 361, 2, "A", iUfmure);
		regAbn = UtilBean.moveSubstring(regAbn, 363, 8, "N", iCodcep);
		regAbn = UtilBean.moveSubstring(regAbn, 371, 1, "N", iCodcut);
		regAbn = UtilBean.moveSubstring(regAbn, 372, 1, "N", iCorolh);
		regAbn = UtilBean.moveSubstring(regAbn, 373, 1, "N", iCorcab);
		regAbn = UtilBean.moveSubstring(regAbn, 374, 1, "N", iTipcab);
		regAbn = UtilBean.moveSubstring(regAbn, 375, 1, "N", iEstciv);
		regAbn = UtilBean.moveSubstring(regAbn, 376, 1, "N", iDoador);
		regAbn = UtilBean.moveSubstring(regAbn, 377, 6, "N", iCodpro);
		regAbn = UtilBean.moveSubstring(regAbn, 383, 11, "N", iNumcpf);
		regAbn = UtilBean.moveSubstring(regAbn, 394, 12, "A", iRenaid);
		regAbn = UtilBean.moveSubstring(regAbn, 406, 11, "N", iPispas);
		regAbn = UtilBean.moveSubstring(regAbn, 417, 3, "N", iAltura);
		regAbn = UtilBean.moveSubstring(regAbn, 420, 13, "N", iRegant);
		regAbn = UtilBean.moveSubstring(regAbn, 433, 2, "A", iUfrant);
		regAbn = UtilBean.moveSubstring(regAbn, 435, 60, "A", iNomant);
		regAbn = UtilBean.moveSubstring(regAbn, 495, 3, "N", iNumpos);
		regAbn = UtilBean.moveSubstring(regAbn, 498, 7, "N", iMatfun);
		regAbn = UtilBean.moveSubstring(regAbn, 505, 2, "N", iNumvia);
		regAbn = UtilBean.moveSubstring(regAbn, 507, 8, "N", iDatdoc);
		regAbn = UtilBean.moveSubstring(regAbn, 515, 2, "N", iGrauin);
		regAbn = UtilBean.moveSubstring(regAbn, 517, 1, "N", iTipopp);
	} // GRAVA HEADER
		// ADD 1 TO QUANTI-REG
		// DATA-GERA := *DATN
		// HORA-GERA := *TIMN
		// WRITE WORK FILE 1 REG-ABN
		// RESET REG-ABN
		// DEFINE SUBROUTINE ROT-DATEMI
		// MOVE I-REGGER TO CHASSI
		// FIND VW-DVECON WITH DIACNT-CHASSI = CHASSI
		// I-DATEMI:= DINCNT-DATEMI
		// END-FIND
		// END-SUBROUTINE

	private void trataErro(Exception e) {
		// if (erro.getCodigoErro() == 3145) {
		// Retry
		// } else {

		UtilBean.mensagemTexto("!--------------------------------------------------------------!");
		UtilBean.mensagemTexto("!  SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA:         !");
		UtilBean.mensagemTexto("!  TRANSACAO CANCELADA,  ENTRAR EM CONTATO COM A STI,          !");
		UtilBean.mensagemTexto("!                                                              !");
		UtilBean.mensagemTexto("!  ANALISTA SOLON MIRANDA,  TEL: 9974-8432 / 227-5588 R-253    !");
		UtilBean.mensagemTexto("!                                                              !");
		UtilBean.mensagemTexto("!  INFORME OU LEIA A LINHA ABAIXO:                             !");
		UtilBean.mensagemTexto("!  ERROR NUMERO:" + e.getMessage() + "    LINHA:" + e.getStackTrace() + " PROGRAMA:ABNCAREG" + "!");
		UtilBean.mensagemTexto("!--------------------------------------------------------------!");
		// }

	}
}
